/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Reportes;

import Model.Connect;
import static Reportes.ReporteEmpresasExcel.conexion;
import static Reportes.ReporteEmpresasExcel.createCell;
import java.io.FileOutputStream;
import java.sql.SQLException;
import java.util.Vector;
import java.util.StringTokenizer;
import javax.swing.JOptionPane;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;

/**
 *
 * @author User
 */
public class ReporteResumenConsolidadoCalificacionExcel {

    static Connect conexion = new Connect();

    /**
     * 019 * Para escribir el contenido de una celda. 020 * 021
     *
     * @param row Row. 022
     * @param i posicion en la fila. 023
     * @param value texto a escribir. 024
     * @param style estilo de la celda. 025
     */
    public static void createCell(Row row, int i, String value, CellStyle style) {
        Cell cell = row.createCell(i);
        value = value + " ";
        cell.setCellValue(value);
        // si no hay estilo, no se aplica
        if (style != null) {
            cell.setCellStyle(style);
        }
    }

    /**
     * 037 * Crea una hoja Excel con el contenido especificado. 038
     *
     * @param v Vector con los datos a escribir en la hoja. 039
     * @param namesheet nombre de la hoja. 040
     * @param filename path del fichero donde se escribe. 041
     */
    public static void crearExcel(Vector v, String namesheet, String filename)
            throws Exception {
        try {
            Workbook wb = new HSSFWorkbook();
            // Workbook wb = new XSSFWorkbook();
            CreationHelper createHelper = wb.getCreationHelper();
            Sheet sheet = wb.createSheet(namesheet);
            int filas = v.size();
            for (int i = 0; i < filas; i++) {
                String fila = (String) v.elementAt(i);
                StringTokenizer st = new StringTokenizer(fila, ",");
                Row row = sheet.createRow((short) i);
                int j = 0;
                while (st.hasMoreTokens()) {
                    String token = st.nextToken();
                    // para la cabecera, la primera fila, aplicamos un estilo (negrita y color de fondo azul)
                    if (i == 0) {
                        CellStyle style = wb.createCellStyle();
                        style.setFillForegroundColor(IndexedColors.BLUE_GREY.getIndex());
                        style.setFillPattern(CellStyle.SOLID_FOREGROUND);
                        Font font = wb.createFont();
                        // font.setFontHeightInPoints((short)10);
                        font.setFontName("Courier New");
                        // font.setItalic(true);
                        // font.setStrikeout(true);
                        font.setBoldweight(Font.BOLDWEIGHT_BOLD);
                        font.setColor(IndexedColors.WHITE.getIndex());
                        style.setFont(font);

                        createCell(row, j, token, style);
                    } else {
                        createCell(row, j, token, null);
                    }
                    j = j + 1;
                }
            }
            // Asignar automaticamente el tamaño de las celdas en funcion del contenido
            for (int i = 0; i < filas; i++) {
                sheet.autoSizeColumn((short) i);
            }
            // Escribir el fichero.
            FileOutputStream fileOut = new FileOutputStream(filename);
            wb.write(fileOut);
            fileOut.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     *
     * 098 * Para probar el correcto funcionamiento de la clase. 099
     *
     * @param args argumentos de entrada. 100
     */
    public void generarEmpresasActivas(String estado) {
        try {
            //Datos a escribir
            int cont = 0;
            Vector v = new Vector();
            v.addElement("NIT,NOMBRRE,DIRECCIÓN,CIUDAD,TELEFONO,ESTADO");
            conexion.conectar();
            conexion.setQuery("SELECT emp_nit, emp_nombre, emp_direccion, emp_ciudad, emp_telefono, emp_estado FROM Empresas WHERE emp_estado = '" + estado + "' order by emp_nit asc");
            System.out.print("SELECT emp_nit, emp_nombre, emp_direccion, emp_ciudad, emp_telefono, emp_estado FROM Empresas WHERE emp_estado = '" + estado + "' order by emp_nit asc");
            conexion.Consultar();
            while (conexion.getResultado().next()) {
                v.addElement("" + conexion.getResultado().getString("emp_nit") + ","
                        + conexion.getResultado().getString("emp_nombre") + ","
                        + conexion.getResultado().getString("emp_direccion") + ","
                        + conexion.getResultado().getString("emp_ciudad") + ","
                        + conexion.getResultado().getString("emp_telefono") + ","
                        + conexion.getResultado().getString("emp_estado"));
                cont++;
            }
            // Generar el fichero
            if (cont > 0) {
                ReporteEmpresasExcel.crearExcel(v, "EMPRESAS", "D:\\Juan Carlos Molina Lozano\\Proyecto Gafitas/"
                        + "REPORTE_DE_EMPRESAS_ACTIVAS.xls");
                System.out.println("[ Generado fichero. ]");
                JOptionPane.showMessageDialog(null, "REPORTE DE EMPRESAS " + estado + " GENERADO \n"
                        + "CONSULTE EN EL ESCRITORIO SU ARCHIVO");

            } else {
                JOptionPane.showMessageDialog(null, "NO HAY EMPRESAS ACTIVAS");
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            conexion.cerrarResultado();
            conexion.cerrarStatement();
            conexion.cerrarConexion();
        }
    }

    public void generarConsolidadoCalificacion() {
        try {
            //Datos a escribir
            int cont = 0;
            double resultado = 0.0;
            Vector v = new Vector();
            v.addElement("CALIFICACION,CANTIDAD DE TITULOS,TOTAL VALOR GIRO");
            conexion.conectar();
            conexion.setQuery("SELECT COUNT(doc_numero) AS CANTIDAD, SUM(doc_valorgiro) AS SUMA , doc_tipodocumento AS CALIFICACION \n"
                    + "FROM documentos GROUP BY doc_tipodocumento");
            System.out.print("SELECT COUNT(doc_numero) AS CALIFICACION, SUM(doc_valorgiro) AS SUMA , doc_tipodocumento AS TIPO \n"
                    + "FROM documentos GROUP BY doc_tipodocumento");
            conexion.Consultar();
            while (conexion.getResultado().next()) {
                v.addElement("" + conexion.getResultado().getString("CALIFICACION") + ","
                        + conexion.getResultado().getString("CANTIDAD") + ","
                        + conexion.getResultado().getString("SUMA"));

                resultado += Double.parseDouble(conexion.getResultado().getString("SUMA"));
                cont++;
            }
            v.addElement("TOTAL , ," + resultado);
            // Generar el fichero
            if (cont > 0) {
                ReporteEmpresasExcel.crearExcel(v, "EMPRESAS", "D:\\Juan Carlos Molina Lozano\\Proyecto Gafitas/"
                        + "REPORTE_RESUMEN_CONSOLIDACION_CALIFICACION.xls");
                System.out.println("[ Generado fichero. ]");
                JOptionPane.showMessageDialog(null, "REPORTE DE CONSOLIDACION DE CALIFICACION GENERADO \n"
                        + "CONSULTE EN EL ESCRITORIO SU ARCHIVO");

            } else {
                JOptionPane.showMessageDialog(null, "NO HAY EMPRESAS INACTIVAS");
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            conexion.cerrarResultado();
            conexion.cerrarStatement();
            conexion.cerrarConexion();
        }
    }

    public static void main(String[] args) {
        ReporteResumenConsolidadoCalificacionExcel obj = new ReporteResumenConsolidadoCalificacionExcel();
        obj.generarConsolidadoCalificacion();
    }
}
